package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FISDemo {
    /*
     文件输入流 读取文件数据
     */
    public static void main(String[] args)throws IOException {
        /*
        FileInputStream(String filename)
        FileInputStream(File file)
        上述两种构造器创建文件输入流时，如果参数表达的是一个文件则可以正常实例化
        若表达文件不存在，或表达的是一个目录，则会直接抛出异常：FileNotFoundException
        例如：
        FileInputStream fis=new FileInputStream("./fos.123");
          当fos。123不存在时，java.io.FileNotFoundException:.\fos.123(系统找不到指定的文件）
        FileInoutStream fis=new FileInputStream(".");--->当表达的是一个目录时
        java.io.FileNotFoundException:.(拒绝访问）
         */
       FileInputStream fis=new FileInputStream("./fos.dat");
       /*
        InputStream超类上定义了一个读取字节的方法（所有的字节输入流都具有该方法）
        int read（）
        读取1字节。并以int形式返回，返回的int值对应的2进制只有“低八位”是有效的--读取到的字节
        高24的全部补0
        如果该方法返回的int值为整数-1（32位2进制都是1）时，则表达流读取到了末尾
        fos.dat文件数据
        00000001 00000010
        第一次调用：
        int d= fis.read(); //读取1个字节
        读取文件数据：
        00000001 00000010
        ^^^^^^^^
        读取字节
        变量d对应的2进制样子：00000000 00000000 00000000 00000001
                          |--------补充24个0--------| 读取的字节
        第二次调用：
        d=fis.read(); //读取1个字节
        读取文件数据：
        00000001 00000010
                 ^^^^^^^^
                 读取的字节
       变量d对应的2进制样子:00000000 00000000 00000000 00000010
                        |--------补充24个0--------| 读取的字节
        第三次调用：
        d=fis.read();  //读取1个字节
        读取文件数据：
        00000001 00000010 文件末尾
                          ^^^^^^^^
                          没有字节了
        变量d对应的2进制样子:11111111 11111111 11111111 11111111
                         |----------32位2进制全为1-----------|
        */
        //第一次调用read读取第一个字节
        int d=fis.read();//d的二进制：00000000 00000000 00000000 00000001
        System.out.println(d);//d的十进制：1
        //第二次调用read读取第二个字节
        d=fis.read();//d的2进制:00000000 00000000 00000000 00000010
        System.out.println(d);//d的十进制:2
        //第三次调用read读取第三个字节
        d = fis.read();//d的2进制:11111111 11111111 11111111 11111111
        System.out.println(d);//d的十进制:-1 返回-1表达文件末尾了
        fis.close();
    }
}
